﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Practices.Unity;
using Condimar.Entities;
using Condimar.BussinesLogic;

namespace Condimar.UI
{
    public partial class FGenerarCompra : Form
    {
        [Dependency]
        public IProveedorBL proveedorBL { get; set; }

        [Dependency]
        public IProductoBL productoBL { get; set; }

        [Dependency]
        public ICompraBL compraBL { get; set; }

        bool isNew = true;

        public void Nuevo()
        {
            isNew = true;
            compraBindingSource.AddNew();
        }
        public FGenerarCompra()
        {
            InitializeComponent();
            this.BuildUp();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            CargarProveedor();

        }
        private void CargarProveedor()
        {
            FrmProveedor frm = new FrmProveedor();
            frm.ShowDialog();


            if (frm.CurrentProveedor != null)
            {
                var nuevoPro = proveedorBL.GetFromProveedorById(frm.CurrentProveedor.Id);
                var compra = compraBindingSource.Current as Compra;
                compra.Proveedor = nuevoPro;
                compra.ProveedorId = nuevoPro.Id;
                compraBindingSource.ResetBindings(true);
            }
        }

        private void FGenerarCompra_Load(object sender, EventArgs e)
        {
            compraBindingSource.AddNew();
            productoBindingSource.DataSource = productoBL.GetAllFromProductos();
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)
        {
            var producto = productoBindingSource.Current as Producto;
            var currentCompra = compraBindingSource.Current as Compra;

            if (producto != null)
            {
                var detalle = new DetalleCompra
                {
                    CompraId = currentCompra.Id,
                    ProductoId = producto.Id,
                    Producto = producto,
                    Catidad = 1,                    
                    Pecio = producto.Precio
                };

                var existe = currentCompra.DetalleCompras.Where(dp => dp.Producto.Id.Equals(producto.Id)).SingleOrDefault();

                if (existe == null)
                {
                    currentCompra.DetalleCompras.Add(detalle);

                    //currentCompra.Total =
                        //currentCompra.DetalleCompras.Sum(dp => dp.Catidad);
                }
                else
                {
                    var rpt = MessageBox.Show(this,
                        string.Format("El producto: {0}," +
                        "ya se encuentra en el pedido, desea agregar otro?", producto.Descripcion),
                        "Mensaje",
                        MessageBoxButtons.YesNo,
                        MessageBoxIcon.Question);

                    if (rpt == DialogResult.Yes)
                    {
                        existe.Catidad++;

                       // currentCompra.Total =
                            //currentCompra.DetalleCompras.Sum(dp => dp.Catidad);
                    }
                }
                compraBindingSource.ResetBindings(true);
                detalleComprasBindingSource.ResetBindings(true);
            }
        }

        public void UpdateCompra(Int32 id)
        {
            isNew = false;

            var compra = compraBL.GetFromCompraById(id);

            compraBindingSource.DataSource = compra;
        }
        private void button5_Click(object sender, EventArgs e)
        {
            var compra = compraBindingSource.Current as Compra;

            if (compra != null)
            {
                try
                {
                    if (isNew)
                    {
                        compraBL.AddCompra(compra);
                        isNew = false;
                    }
                    else
                    {
                        compraBL.UpdateCompra(compra);
                        UpdateCompra(compra.Id);
                    }
                    MessageBox.Show("COMPRA GUARDADA CON EXITO");
                }
                catch (Exception ex)
                {

                    MessageBox.Show(this, ex.Message,
                        "Mensaje",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Stop);

                }
            }
            compraBindingSource.ResetBindings(true);
            detalleComprasBindingSource.ResetBindings(true);
        }

    }
}
